import { autoUpdater } from 'electron-updater'
import { ipcMain } from 'electron'
import { log } from '@/utils'
// import path from 'path'

let mainWindow: Electron.BrowserWindow | null = null
// 封装更新相关的进程通信方法
const sendUpdateMessage = (opt: { cmd: string; data: unknown }) => {
  mainWindow?.webContents.send(opt.cmd, opt.data)
}
const checkForUpdates = (win: Electron.BrowserWindow) => {
  mainWindow = win
  // 关闭自动更新
  autoUpdater.autoDownload = false
  // 开启开发环境调试，后边会有说明
  autoUpdater.forceDevUpdateConfig = true
  // 日志记录设置
  // log.transports.file.level = 'error'
  // autoUpdater.logger = log

  // 更新错误
  autoUpdater.on('error', (error) => {
    log.error('更新错误', error)

    sendUpdateMessage({
      cmd: 'update-error',
      data: error?.message || '更新错误'
    })
  })

  //监听发现可用更新事件
  autoUpdater.on('update-available', (message) => {
    log.debug('监听发现可用更新事件', message)

    sendUpdateMessage({
      cmd: 'update-available',
      data: message
    })
  })
  //监听没有可用更新事件
  autoUpdater.on('update-not-available', (message) => {
    log.debug('监听没有可用更新事件', message)
    sendUpdateMessage({
      cmd: 'update-not-available',
      data: message
    })
  })

  // 更新下载进度事件
  autoUpdater.on('download-progress', (progressObj) => {
    log.debug('更新下载进度事件', progressObj)
    mainWindow?.setProgressBar(progressObj.percent)
    sendUpdateMessage({
      cmd: 'download-progress',
      data: progressObj
    })
  })
  //监听下载完成事件
  autoUpdater.on('update-downloaded', (releaseObj) => {
    log.debug('监听下载完成事件', releaseObj)

    sendUpdateMessage({
      cmd: 'update-downloaded',
      data: releaseObj
    })
    //退出并安装更新包
    autoUpdater.quitAndInstall()
  })

  // 监听取消事件
  autoUpdater.on('update-cancelled', () => {
    log.debug('更新已取消')
    sendUpdateMessage({
      cmd: 'download-progress',
      data: '更新已取消'
    })
  })

  //接收渲染进程消息，开始检查更新
  ipcMain.on('check-update', () => {
    //执行自动更新检查
    log.debug('检查更新')
    autoUpdater.checkForUpdates()
  })
  // 触发更新
  ipcMain.on('update-app', () => {
    //执行自动更新检查
    log.debug('触发更新')
    autoUpdater.downloadUpdate()
  })
}

export default checkForUpdates
